/*
 * kernel_info.h
 *
 * Estructura de datos representando información de kernel; con operaciones
 * para adquisición de datos desde el sistema de archivos /proc, y 
 * operaciones de "pretty-printing".
 *
 */

#ifndef KERNEL_INFO_H
#define KERNEL_INFO_H

#include <stdio.h> /* Para FILE * */

/* TAD de información de kernel */
struct _kernel_info_t;
typedef struct _kernel_info_t KernelInfo;

KernelInfo *kernel_info_new (const char *proc_dir);
/*
 * Nuevo `KernelInfo', con datos del sistema cargados del procfs montado
 * en proc_dir.
 *   Returns: nuevo KernelInfo.
 * REQUIRES:
 *     proc_dir != NULL
 * ENSURES:
 *     result != NULL
 */

void kernel_info_destroy (KernelInfo *self);
/*
 * Destruye `self'.
 *   self: KernelInfo a destruir
 * Requires: self != NULL
 */

void kernel_info_update (KernelInfo *self);
/*
 * Actualiza la informacion en `self'.
 *   self: KernelInfo a actualizar
 * Requires: self != NULL
 */

void kernel_info_print (const KernelInfo *self, FILE *out, const char *format);
/*
 * Hace pretty-print de `self' al archivo `out' siguiendo `format'
 *   self: KernelInfo a imprimir
 *   out: un archivo abierto para escritura
 *   format: una cadena a imprimirse. Las palabras marcadas entre símbolos
 *           '$' se sustituyen por su valor. Las palabras válidas se
 *           documentan abajo
 * Requires: self != NULL && out != NULL && format != NULL
 *
 * $$                 Un símbolo '$'
 * $hostname$         Nombre del equipo
 * $date$             Fecha actual
 * $cpu_type$         Fabricante/arquitectura de CPU (para el primer CPU)
 * $cpu_model$        Modelo específico de CPU (para el primer CPU)
 * $kernel_major$     Versión mayor del kernel
 * $kernel_minor$     Versión menor del kernel
 * $kernel_svn$       Sub-version del kernel
 * $kernel_tag$       Etiqueta del kernel (incluye el '-' inicial si está)
 * $uptime_s$         Uptime en segundos
 * $uptime_f$         Uptime formateado
 * $cputime_user$     Tiempo de CPU usado por usuarios (en ms)
 * $cputime_system$   Tiempo de CPU usado por el sistema (en ms)
 * $cputime_idle$     Tiempo de CPU no usado (en ms)
 * $context_switches$ Cambios de contexto desde el arranque
 * $total_processes$  Cantidad de procesos creados desde el arranque
 * $boot_date$        Fecha/hora de inicio del s.o. (formato usado por ctime())
 * $disk_requests$    Solucitudes de L/E realizadas sobre discos.
 * $mem_available$    Cantidad de memoria sin usar (en kB)
 * $mem_total$        Cantidad de memoria disponible para el sistema
 * $load_average_1$   Promedio de carga en el último minuto
 */

#endif /* KERNEL_INFO_H */
